/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import util.datatypes.DTCliente;
import util.datatypes.DTReserva;
import util.exceptions.NoExisteReservaException;
/**
 *
 * @author bruno
 */
public class Cliente {
    private int ci;
    private String nombre;
    private Date fechaNacimiento;
    private List<Reserva> listaReservas;

    public Cliente()
    {
        listaReservas = new LinkedList<Reserva>();
    }

    public Cliente(int ci, String nombre, Date fechaNacimiento) {
        this.ci = ci;
        this.nombre = nombre;
        this.fechaNacimiento = fechaNacimiento;
        this.listaReservas = new LinkedList<Reserva>();

    }

    public int getCi() {
        return ci;
    }

    public void setCi(int ci) {
        this.ci = ci;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<Reserva> getListaReservas() {
        return listaReservas;
    }

    public void setListaReservas(List<Reserva> listaReservas) {
        this.listaReservas = listaReservas;
    }

    public DTCliente getDTCliente(){

        //return (new DTCliente());
        return (new DTCliente(ci, nombre, fechaNacimiento));
    }
    
    public int crearReserva (Reserva r)
    {
        try
        {
            this.listaReservas.add(r);
            return 1;
        }
        catch(Exception e)
        {
            e.toString();
        }
        return 0;
    }

    public int cancelarReserva (int idReserva) throws NoExisteReservaException
    {
            for (Reserva res: listaReservas)
                if (res.getId() == idReserva)
                {
                    res.setEstado(true);
                    return 1;
                }
            throw new NoExisteReservaException();
    }
    
    public int modificarReserva (Reserva r) throws NoExisteReservaException
    {
        for (Reserva res: listaReservas)
                if (res.getId() == r.getId())
                {        
                    listaReservas.remove(res);
                    listaReservas.add(r);
                    return 1;
                }
        throw new NoExisteReservaException();
    }

    public boolean chequearFuncionesSolapadas (Funcion f)
    {
        double horaFuncInicio = f.getHoraInicio();
        double horaFuncFin = f.getHoraFin();

        double horaResInicio = 0;
        double horaResFin = 0;

        if (horaFuncInicio <= 1){
            horaFuncInicio = horaFuncInicio + 24;
        }

        if (horaFuncFin <= 1) {
            horaFuncFin = horaFuncFin + 24;
        }

        for (Reserva r: listaReservas)
        {
            if (!r.isEstado() && !r.isVendida())
            {
                horaResInicio = r.getFuncion().getHoraInicio();
                horaResFin = r.getFuncion().getHoraFin();
                if (r.getFuncion().getHoraInicio() <= 1){
                    horaResInicio = r.getFuncion().getHoraInicio() + 24;
                }

                if (r.getFuncion().getHoraFin() <= 1) {
                    horaResFin = r.getFuncion().getHoraFin() + 24;
                }

                if  (horaResInicio <= horaFuncFin &&
                      horaResFin >= horaFuncInicio)
                return true;
            }
        }
        return false;
    }
    
    public List<DTReserva> getDTReservas(){
       List<DTReserva> DTReservas =new LinkedList<DTReserva>();
       
       for(Reserva r:this.listaReservas){
           DTReservas.add(r.getReserva());
       }
       return DTReservas;
       
   }
}
